home *** CD-ROM | disk | FTP | other *** search
/ PC Answers 2003 September / PC Answers September 2003.iso / Software / trial / MonitorIT 5.2.06 / monitorit_fullsetup.exe / data1.cab / Rpm / AdministerGroups.asp < prev    next >
Encoding:
Text File  |  2003-06-24  |  17.9 KB  |  522 lines

  1. <html>
  2.  
  3. <head>
  4. <meta name="GENERATOR" content="Microsoft FrontPage 3.0">
  5. <title>Configure Groups</title>
  6. <link rel="stylesheet" type="text/css" href="css/rpmstyle.css">
  7.  
  8. <style>
  9. .GTabBox {  height : 200; width : 530; border: none; background-color : activeborder }
  10. </style>
  11. </head>
  12.  
  13. <body class="bodyc" language="JavaScript" RPMHostIP="!BreakoutBot:MonitorIP!"
  14. RPMHostPort="!BreakoutBot:MonitorPort!" RPMUserName="!BreakoutBot:UserName!" BOBDone="!BreakoutBot:Done!"
  15. onload="top.banner.savePageCoord(event,document.body,'AdminGroups'); InitRpmCC_AG();" onbeforeunload="DiscoRpmCC_AG()" onresize="processSizeChange()" onclick="checkClick()" onkeydown="processBSP()">
  16.  
  17. <script LANGUAGE="JavaScript" src="js/MiscFunc.js"></script>
  18. <script LANGUAGE="JavaScript" src="js/GroupFunc.js"></script>
  19. <script LANGUAGE="JavaScript" src="js/ButtonFunc.js"></script>
  20.  
  21. <script LANGUAGE="JavaScript">
  22. <!--
  23.  
  24. var    GMode = ""; // Mode of Operation, New, Edit, Delete, Lookup
  25. var    CGrpID = "*"; // Computer Group ID
  26. var   ignoreDBChangeEvent = false;
  27. var     ReconnectEvent = false;
  28. var     Hp = 82;
  29. var   Tid = null;
  30.  
  31. // Capture and ignore script errors
  32.     window.onerror = wwScrErr;
  33. function wwScrErr() {
  34.     return true;
  35. }
  36.  
  37. /* On Load tell the Comm control to Connect to the Server */
  38. function InitRpmCC_AG() {
  39.     top.MainLoaded = true; // Flag that Main is now loaded
  40.     initButtonState(); // set initial button state
  41.     Hp = parseInt(document.body.RPMHostPort,10);
  42.     RpmCC_AG.Connect(document.body.RPMHostIP,Hp, "");
  43.     processSizeChange();
  44. }
  45. function processReconnect() {
  46.     Tid = null;
  47.     if ( RpmCC_AG.IsConnected() ) {
  48.         Tid = setTimeout("processConnectionCheck()",30000); // Delay 30 secs then check connection
  49.         return;
  50.     }
  51.     RpmCC_AG.Connect(document.body.RPMHostIP,Hp, ""); 
  52. }
  53. function processConnectConfirmed() {
  54.     // Restore Filter and Computer Store    
  55.     if ( ReconnectEvent == false ) {
  56.         processLookupReset(); // go do Group Lookup
  57.         ReconnectEvent = true;
  58.     }
  59.     top.Rstatus.Pstat("Connected");
  60.     if ( Tid != null ) {
  61.         clearTimeout(Tid); // stop timeout routine
  62.     }
  63.     Tid = setTimeout("processConnectionCheck()",30000); // Delay 30 secs then check connection
  64. }
  65. function processConnectionCheck() {
  66.     Tid = null;
  67.     RpmCC_AG.SendKeepAlive("Check");
  68.     Tid = setTimeout("processConnectionCheck()",30000); // Delay 30 secs then check connection
  69. }
  70.  
  71. /* On Unload tell the Comm control to Disconnect from the Server */
  72. function DiscoRpmCC_AG() {
  73.     RpmCC_AG.Disconnect();
  74.     top.banner.processStopCommX();
  75.     if ( Tid != null ) {
  76.         clearTimeout(Tid); // stop timeout routine
  77.     }
  78. }
  79.  
  80. function processNewButton() {
  81.     GMode = "New"; // Set Mode of operation
  82.     AG_Group.value = ""; // clear Name field
  83.     AG_Desc.value = ""; // clear Description field
  84.     commonNew_Edit(); // Do common processing
  85. }            
  86.  
  87. function processEditButton() {
  88.     GMode = "Edit"; // Set Mode of operation
  89.     commonNew_Edit(); // Do common processing
  90. }    
  91.  
  92. function commonNew_Edit() { //Common processing for New and Edit
  93.     /* enable input fields */
  94.     AG_Group.className = "";
  95.     AG_Desc.className = "";    
  96.     AG_Desc.readOnly = false;
  97.  
  98.     /* enable and disable appropriate buttons */
  99.     SetButtonState(GNewButton,"1");
  100.     SetButtonState(GEditButton,"1");
  101.     SetButtonState(GDeleteButton,"1");
  102.     SetButtonState(GUpdateButton,"0");
  103.     SetButtonState(GResetButton,"0");
  104.  
  105.     /* enable appropriate Group Name fields */
  106.     AG_Group.style.display = "";
  107.     AG_GroupSel.style.display = "none";
  108.     AG_Group.focus();
  109. }
  110.  
  111. function processUpdateButton() {
  112.     /* get input which is validated when first entered */
  113.     AG_GName = AG_Group.value;
  114.     AG_GDesc = AG_Desc.value;
  115.  
  116.     if (AG_GName.length == 0) { // if no name entered
  117.         top.Rstatus.Pstat("Please enter a name",true);    
  118.         alert("Please enter a name");    
  119.         AG_Group.focus();
  120.     }
  121.     else {
  122.         /* inhibit Update Button now */
  123.         SetButtonState(GUpdateButton,"1");
  124.  
  125.         /* Determine if GMode is "New" or "Edit" and send data to DataBase Server appropriately */
  126.         if (GMode == "New") {
  127.             rstat = RpmCC_AG.GroupAdd(AG_GName,AG_GDesc);
  128.         }
  129.         else { // "Edit"
  130.             OrigName = AG_GroupSel.options[GrpSelectIdx].text; 
  131.             AG_GrpID = getGroupID(OrigName,AG_GrpStore);
  132.             rstat = RpmCC_AG.GroupReplace(AG_GrpID,AG_GName,AG_GDesc);
  133.         }
  134.     
  135.         if ( rstat ) { // if unable to initiate request        
  136.             top.Rstatus.Pstat("Unable to start the UPDATE request",true);
  137.             processReset();
  138.         }
  139.         else { // waiting for OperationCompleteEvent
  140.             ignoreDBChangeEvent = true;
  141.             top.Rstatus.Pstat("One moment while UPDATE request completes");
  142.         }
  143.     }
  144. }
  145.  
  146. function processDeleteButton() {
  147.     GMode = "Delete"; // set mode of operation
  148.     AG_GName = AG_Group.value; // get Group Name
  149.  
  150.     /* ask user to confirm delete */
  151.     if ( confirm("Are you sure you want to delete: " + AG_GName + " ?") ) {
  152.         /* inhibit Edit and Delete now */
  153.         SetButtonState(GEditButton,"1");
  154.         SetButtonState(GDeleteButton,"1");
  155.         processCommonDelete(AG_GName,0);
  156.     }
  157. }
  158.  
  159. /* Computers Still Assigned to Group Delete Request */
  160. function processGroupErrorDeleteDependent() {
  161.     AG_GName = AG_Group.value; // get Group Name
  162.     top.Rstatus.Pstat("The DELETE request not completed.  There are dependent Computers",true);
  163.     rs = confirm("There are Computers Still Assigned to Group: " + AG_GName + ".\n Press OK to Delete Group and all Computers in " + AG_GName + ".\n Press Cancel to cancel Delete request.");
  164.     if (rs) {
  165.         processCommonDelete(AG_GName,1);
  166.     }        
  167.     else {
  168.         top.Rstatus.Pstat("The DELETE request is Cancelled");
  169.         SetButtonState(GNewButton,"0"); // Reenable Edit and Delete Buttons
  170.         SetButtonState(GEditButton,"0");    
  171.         SetButtonState(GDeleteButton,"0");
  172.         if ( AG_GroupSel.style.visibility != "hidden" ) {
  173.             AG_GroupSel.focus();
  174.         }
  175.     }
  176. }
  177.  
  178. /* Common Delete Processing */
  179. function processCommonDelete(GName,Uc) {
  180.     GrpID = getGroupID(GName,AG_GrpStore);    // Get Group ID from Name
  181.     /* send DELETE request to DataBase Server */
  182.     if ( Uc ) { // if Unconditional delete
  183.         rs = RpmCC_AG.GroupDeleteUnconditional(GrpID); 
  184.     }
  185.     else {
  186.         rs = RpmCC_AG.GroupDelete(GrpID); 
  187.     }
  188.     if ( rs ) {            
  189.         top.Rstatus.Pstat("Unable to start the DELETE request",true);
  190.         processReset();
  191.     }
  192.     else { // waiting for OperationCompleteEvent
  193.         ignoreDBChangeEvent = true;
  194.         top.Rstatus.Pstat("One moment while DELETE request completes");
  195.     }
  196. }
  197.  
  198. /* Initial Group Lookup Request */
  199. function processLookupReset() {
  200.     /* Make sure Group Store and Group Name combo are flushed */
  201.     lth = AG_GroupSel.length;
  202.     for (i=0; i < lth; ++i)
  203.         AG_GroupSel.remove(0);
  204.  
  205.     lth = AG_GrpStore.length;
  206.     for (i=0; i < lth; ++i)
  207.         AG_GrpStore.remove(0);
  208.  
  209.     GrpLupRecCount = 0; // clear Lookup record counter
  210.     if ( RpmCC_AG.GroupLookup("*","*","*") ) {
  211.             GMode = "";
  212.             top.Rstatus.Pstat("Unable to start the GROUP LOOKUP request",true);
  213.     }
  214.     else {
  215.             GMode = "Lookup"; // set Mode of operation
  216.             top.Rstatus.Pstat("One moment while GROUP LOOKUP request completes");
  217.     }
  218. }
  219.  
  220. /* Reset Processing after initial and subsequent Group operations */
  221. function processResetButton() {
  222.     GrpSelectIdx = 0; // reset index
  223.     if ( GrpLupRecCount == 0 ) {
  224.       processCommonReset();
  225.        SetButtonState(GEditButton,"1");    
  226.         SetButtonState(GDeleteButton,"1");
  227.     }
  228.     else {
  229.        populateInput(0); // set Name and Description fields
  230.         processCommonReset();
  231.  
  232.         /* select and focus to 1st name entry */
  233.         AG_GroupSel.options[0].selected = "selected";
  234.         if ( AG_GroupSel.style.visibility != "hidden" ) {
  235.             AG_GroupSel.focus();
  236.         }
  237.     }
  238. }
  239.  
  240. /* Process Combo Group Name Change Event */
  241. function processGroupName() {
  242.     Nobj = AG_GroupSel; // get object
  243.     for (i=0; i < Nobj.length; ++i) {
  244.         if ( Nobj.options[i].selected ) {
  245.             GrpSelectIdx = i;
  246.             populateInput(GroupRecLength*i);
  247.             break;
  248.         }
  249.     }
  250. }
  251.  
  252. function populateInput(idx) {
  253.     StoreObj = AG_GrpStore; 
  254.     AG_Group.value = StoreObj.options[idx+0].text; // Synchronize name field with Store name field
  255.     AG_Desc.value = (StoreObj.options[idx+2].text.length == 0) ? "" : StoreObj.options[idx+2].text;
  256. }
  257.  
  258. function updateStore(idx) {
  259.     StoreObj = AG_GrpStore;
  260.     AG_GName = AG_Group.value; // Group Name
  261.     AG_GroupSel.options[idx].text = AG_GName; // Update name in case edited
  262.     si = GroupRecLength * idx; // index into Store for correct entry
  263.     StoreObj.options[si+0].text = AG_GName;
  264.     StoreObj.options[si+2].text = (AG_Desc.value.length == 0) ? "" : AG_Desc.value; 
  265. }
  266.  
  267. /* Process Group OP Complete Event */
  268. function processGroupOpComplete() {
  269.     top.Rstatus.Pstat("Request Completed");
  270.     if (GMode == "Lookup") {
  271.         if (GrpLupRecCount == 0) { // check if any records found
  272.             top.Rstatus.Pstat("No record matches found for GROUP LOOKUP request",true);
  273.         }
  274.         processResetButton();
  275.     }
  276.     else if (GMode == "Edit") {
  277.         /* update the Storage */
  278.         updateStore(GrpSelectIdx);
  279.         processCommonReset();
  280.         if ( AG_GroupSel.style.visibility != "hidden" ) {
  281.             AG_GroupSel.focus();
  282.         }
  283.     }    
  284.     else if (GMode == "Delete") {
  285.         /* update the Storage */
  286.         dix = GroupRecLength*GrpSelectIdx;
  287.         for (i=0; i < GroupRecLength; ++i) {
  288.             AG_GrpStore.remove(dix);
  289.         }
  290.         AG_GroupSel.remove(GrpSelectIdx);
  291.         if (AG_GroupSel.length == 0) { // if no more Groups
  292.             AG_Desc.value = ""; // clear Description field
  293.             GrpLupRecCount = 0; // clear Group record counter
  294.         }
  295.         processResetButton(); 
  296.     }
  297.     else { // GMode New
  298.         /* Reset for next */
  299.         processLookupReset();
  300.     }
  301. }
  302.  
  303. function processCommonReset() {
  304.     /* enable and disable appropriate input fields */
  305.     AG_Desc.className = "idis";    
  306.     AG_Desc.readOnly = true;
  307.     
  308.     /* enable and disable appropriate buttons */
  309.     SetButtonState(GNewButton,"0");    
  310.     SetButtonState(GEditButton,"0");    
  311.     SetButtonState(GDeleteButton,"0");
  312.     SetButtonState(GUpdateButton,"1");    
  313.     SetButtonState(GResetButton,"1");
  314.  
  315.     /* enable appropriate Group Name fields */
  316.     AG_Group.style.display = "none";
  317.     AG_GroupSel.style.display = "";
  318. }
  319.  
  320. function processKeyPress() {
  321.     /* get KeyCode and check if invalid */
  322.     kc = event.keyCode;
  323.     stat = 1; // default to OK
  324.  
  325.     // Keys:   ~            %           [           ]           #           !
  326.     if (kc == 126 ||    kc == 37 || kc == 91 ||    kc == 93 || kc == 35 || kc == 33) { // Not acceptable 
  327.         stat = 0;
  328.     } // Keys:        *           ?
  329.     else if ( (kc == 42 || kc == 63) &&  event.srcElement.name != "AG_Group" ) { //Not acceptable
  330.         stat = 0;
  331.     }
  332.     if (stat == 0) { // if Not Acceptable
  333.         event.returnValue=false;
  334.         top.Rstatus.Pstat("Keys ~%*?[]#! are not accepted for this field");    
  335.         alert("Keys ~%*?[]#! are not accepted for this field");    
  336.     }
  337.     else {
  338.         top.Rstatus.Pstat(""); // clear status line
  339.     }
  340. }    
  341.  
  342. /* Process Duplicate Error in Group Add / Replace Operation */
  343. function processGroupUpdateErrorDuplicate() {
  344.     top.Rstatus.Pstat("A duplicate GROUP already exist in the DataBase. Cannot complete the UPDATE request",true);
  345.     processResetButton(); // reset
  346. }
  347.  
  348. /* Process Group ID Not Found Error in EDIT/UPDATE Operation */
  349. function processGroupUpdateErrorBadGroup() {
  350.     top.Rstatus.Pstat("Group not found in the DataBase. Cannot complete the UPDATE/DELETE request",true);
  351.     processResetButton(); // reset
  352. }
  353.  
  354. /* Set initial button state */
  355. function initButtonState() {
  356.     SetButtonState(GNewButton,"0");    
  357.     SetButtonState(GEditButton,"1");    
  358.     SetButtonState(GDeleteButton,"1");
  359.     SetButtonState(GUpdateButton,"1");    
  360.     SetButtonState(GResetButton,"1");
  361. }
  362. function SetButtonState(BtObj,BState) {
  363.     //BtObj.className = (BState == "0") ? "BoxButton" : "BoxButtonD";
  364.     BtObj.disabled = (BState == "0") ? "" : "disabled";
  365.     BtObj.bdis = BState;
  366. }
  367.  
  368. function processSizeChange() {
  369.     //PopUpContext Menu
  370.     bCw = document.body.clientWidth;
  371.    PopUpContextSize(bCw);
  372. }
  373.  
  374. function PopUpContextOpen() {
  375.     AG_GroupSel.style.visibility = "hidden";
  376. }
  377. function PopUpContextClose() {
  378.     AG_GroupSel.style.visibility = "visible";
  379. }
  380.  
  381. //-->
  382. </script>
  383.  
  384. <script LANGUAGE="JavaScript" FOR="RpmCC_AG" EVENT="Connected()">
  385. <!--
  386. processConnectConfirmed();
  387. //-->
  388. </script> 
  389.  
  390. <script LANGUAGE="JavaScript" FOR="RpmCC_AG" EVENT="Disconnected()">
  391. <!--
  392. top.Rstatus.Pstat("Disconnected",true);
  393. if ( Tid != null ) {
  394.     clearTimeout(Tid); // stop timeout routine
  395. }
  396. Tid = setTimeout("processReconnect()",10000); // Delay 10 secs then try reconnnect
  397. //-->
  398. </script>
  399.  
  400. <script LANGUAGE="JavaScript" FOR="RpmCC_AG" EVENT="DBChanged(cdata)">
  401. <!--
  402. var warr = new Array();
  403. warr = cdata.split("~"); // parse the event data
  404. // process only if Group Table change
  405. if ( warr[0] == "5" && ignoreDBChangeEvent == false) {
  406.     top.banner.processDBChangeNotifyEvent(cdata);
  407. }
  408. ignoreDBChangeEvent = false;
  409. //-->
  410. </script>
  411.  
  412. <script LANGUAGE="JavaScript" FOR="RpmCC_AG" EVENT="GroupAddErrorDuplicate()">
  413. <!--
  414. processGroupUpdateErrorDuplicate();
  415. //-->
  416.     </script>
  417. <script LANGUAGE="JavaScript" FOR="RpmCC_AG" EVENT="ComputerReplaceErrorBadGroup()">
  418. <!--
  419. processGroupUpdateErrorBadGroup();
  420. //-->
  421.     </script>
  422. <script LANGUAGE="JavaScript" FOR="RpmCC_AG" EVENT="GroupOpComplete()">
  423. <!--
  424. processGroupOpComplete();
  425. //-->
  426.     </script> <script
  427. LANGUAGE="JavaScript" FOR="RpmCC_AG" EVENT="GroupOpError()">
  428. <!--
  429. processGroupOpError();
  430. //-->
  431.     </script> <script
  432. LANGUAGE="JavaScript" FOR="RpmCC_AG" EVENT="GroupLookupRecord(Gid,GNme,GDesc)">
  433. <!--
  434. processGroupLookupRecord(Gid,GNme,GDesc,AG_GroupSel,AG_GrpStore);
  435. //-->
  436.     </script> <script
  437. LANGUAGE="JavaScript" FOR="RpmCC_AG" EVENT="GroupErrorDeleteDependant()">
  438. <!--
  439. processGroupErrorDeleteDependent();
  440. //-->
  441.     </script> <script
  442. LANGUAGE="JavaScript" FOR="RpmCC_AG" EVENT="GroupReplaceErrorDuplicate()">
  443. <!--
  444. processGroupUpdateErrorDuplicate();
  445. //-->
  446.     </script> <script
  447. LANGUAGE="JavaScript" FOR="RpmCC_AG" EVENT="GroupErrorDeleteNotFound()">
  448. <!--
  449. processGroupUpdateErrorBadGroup();
  450. //-->
  451.     </script> <script
  452. LANGUAGE="JavaScript" FOR="RpmCC_AG" EVENT="GroupErrorReplaceNotFound()">
  453. <!--
  454. processGroupUpdateErrorBadGroup();
  455. //-->
  456.     </script> <script
  457. LANGUAGE="JavaScript" FOR="RpmCC_AG" EVENT="StartCommunication()">
  458. <!--
  459. top.banner.processStartComm();
  460. //-->
  461.     </script> <script
  462. LANGUAGE="JavaScript" FOR="RpmCC_AG" EVENT="StopCommunication()">
  463. <!--
  464. top.banner.processStopComm();
  465. //-->
  466.     </script> 
  467.  
  468. <script LANGUAGE="JavaScript" src="js/PopUpMenuFunc.js"></script>
  469.  
  470. <object ID="RpmCC_AG" NAME="RpmCC_AG" WIDTH="14" HEIGHT="1" style="display:none"
  471. CLASSID="CLSID:D88C2358-FC83-11D1-BF49-00104B2D6F80" CODEBASE="controls/RPMComm.cab#version=5,2,0,0">
  472.   <param name="_Version" value="65536">
  473.   <param name="_ExtentX" value="2646">
  474.   <param name="_ExtentY" value="1341">
  475.   <param name="_StockProps" value="0">
  476. </object>
  477.  
  478. <center><div class="GTabBox" border="0" >
  479. <center>
  480. <div align="left" style="clear:both">
  481. <table border="1"  borderColor="activeborder" align="left">
  482.     <tr><td borderColorDark="graytext" borderColorLight="white" height="25" style="font-weight:800; font-size:12pt; background-color:threedhighlight; color:windowtext"> <img src="images/sAdminGroups.gif" align="absmiddle" height="16" width="16"> Configure Groups </td><td width="*"></td>
  483.     </tr></table><br><br>
  484. </div>
  485.  
  486. <div align="left" style="clear:both">
  487. <table class="fldset" border="0" width="522" cellspacing="3" cellpadding="2" height="125">
  488.   <tr>
  489.     <td width="505" height="120"><div align="left"><table border="0" width="500"
  490.     cellspacing="3" cellpadding="2" height="80">
  491.       <tr>
  492.         <td width="150" align="right" class="inputlabel" height="1">Group Name:</td>
  493.         <td width="350" height="30"><input TYPE="text" SIZE="40" NAME="AG_Group" maxLength="40"
  494.         onkeypress="processKeyPress();" onkeydown="processKeyDown();" style="display: none"
  495.           onFocus="chkDisabled(this)"> <select ONCHANGE="processGroupName()" SIZE="1" 
  496.           NAME="AG_GroupSel" class="idis" style="width: 200pt">
  497.         </select> <select SIZE="1" NAME="AG_GrpStore" style="display: none">
  498.         </select> </td>
  499.       </tr>
  500.       <tr>
  501.         <td width="150" align="right" class="inputlabel" height="30">Group Description:</td>
  502.         <td width="350" height="1"><input TYPE="text" SIZE="50" NAME="AG_Desc" maxLength="64"
  503.         onkeypress="processKeyPress();" onkeydown="processKeyDown();" onFocus="chkDisabled(this)" class="idis"> </td>
  504.       </tr>
  505.     </table>
  506.     </div></td>
  507.   </tr>
  508.   </table>
  509.     <table class="fldset" border="1" width="522" cellspacing="1" cellpadding="1" height="40">
  510.   <tr>
  511.     <td width="505" align="center" height="40">
  512.     <button id="GNewButton" title="Enter a New Group" onclick="if (this.bdis == '0') processNewButton();" bdis="0" style="width:80px; height:28px" style="font-family:arial; font-size : 8pt; font-weight : 600; cursor:hand" disabled><img src="images/NewImg.gif" align="absmiddle" height="14" width="13">  New</button>   
  513.     <button id="GEditButton" title="Edit the selected Group" onclick="if (this.bdis == '0') processEditButton();" bdis="0" style="width:80px; height:28px" style="font-family:arial; font-size : 8pt; font-weight : 600; cursor:hand" disabled><img src="images/ConfigImg.gif" align="absmiddle" height="18" width="17"> Edit</button>   
  514.     <button id="GDeleteButton" title="Delete the selected Group" onclick="if (this.bdis == '0') processDeleteButton();" bdis="0" style="width:80px; height:28px" style="font-family:arial; font-size : 8pt; font-weight : 600; cursor:hand" disabled><img src="images/DelImg.gif" align="absmiddle" height="14" width="14">Delete</button>   
  515.     <button id="GUpdateButton" title="Update database for the selected Group" onclick="if (this.bdis == '0') processUpdateButton();" bdis="0" style="width:80px; height:28px" style="font-family:arial; font-size : 8pt; font-weight : 600; cursor:hand" disabled><img src="images/sSave.gif" align="absmiddle" height="15" width="15"> Save</button>   
  516.     <button id="GResetButton" title="Cancel and return to New" onclick="if (this.bdis == '0') processResetButton();" bdis="0" style="width:80px; height:28px" style="font-family:arial; font-size : 8pt; font-weight : 600; cursor:hand" disabled><img src="images/reset.gif" align="absmiddle" height="15" width="15">Cancel</button></td> </tr>
  517. </table></div>
  518. </center></div>
  519. </center>
  520. </body>
  521. </html>
  522.